import { Base64 } from 'js-base64'

class https {
    static request(url, data = {}, header = {}, method = "GET") {
        // header 空值处理
        let _header = {
          "content-type": "application/x-www-form-urlencoded"
        }
        if (Object.keys(header).length > 0) {
          _header = header
        }
        return new Promise((resolve, reject) => {
          wx.showLoading({title: '加载中...'})
          wx.request({
            url: url,
            data: data,
            header: _header,
            method: method,
            success: (res => {
                wx.hideLoading()
              // 服务器 非200 错误
              if (res.statusCode && res.statusCode != 200) {
                wx.showToast({ title: '服务器 ' + res.statusCode + ' 错误', icon: 'none' })
                reject(res)
                return
              }
              if (res.data && res.data.code != 0) {
                // 业务状态非0 是否提示
                if (showToast) {
                  wx.showToast({ title: res.data.msg, icon: 'none' })
                }
                reject(res)
                return
              }
              resolve(res.data)
            }),
            fail: (err => {
                wx.hideLoading()
                wx.showToast({ title: '请求url不在合法域名中，请打开调试模式', icon: 'none' })
                reject(err)
            })
          })
        })
    }
    static getCommonHeader() {
        let header = {
          'Content-type': 'application/x-www-form-urlencoded'
        }
        // 如果token有值则带上
        let token = wx.getStorageSync("token")
        const base64 = Base64.encode(token+':')
        if (token) {
            header = Object.assign({}, header, {
              'Authorization': 'Basic '+base64
            })
        }
        // if (token) {
        //   header = Object.assign({}, header, {
        //     'Authorization': 'Bearer ' + token
        //   })
        // }
        return header
    }
     
    static getRequest(url, data = {}, header = {}){
        return this.request(url, data, "GET", header)
      }

    static postRequest(url, data = {}, header = {}){
        return this.request(url, data, "POST", header)
      }


}
module.exports = https



// const utils = require('../utils.js');

// module.exports = {
//   getUserInfo: function(data, config = {}){
//     return utils.postRequest(
//       'http://api.xx.com/get_user_info',
//       data,
//       utils.getCommonHeaders(),
//       config
//     );
//   }
// }

// 然后页面调用：
// const api = require('../api.js');
// /**
//  * 生命周期函数--监听页面加载
//  */
// onLoad: function (options) {
//   api.getUserInfo({
//       "user_id": "1"
//     }, {
//       "showLoading": "false",
//       "showToast": "false",
//       "loadingTitle": "登录中"
//     })
//     .then(res => {
//       console.log(res);
//     });
// }

// 一般情况下上面的 showLoading 参数等配置项可以不写，用默认就行，那页面就更简洁了
// const api = require('../api.js');

// api.getUserInfo({"user_id": "1"})
//   .then(res => {
//     console.log(res);
//   });














// const https = {
//     request(options = {}) {
//       const { url, method, data, header } = options;
  
//       // 加载动画
//       wx.showLoading({
//         title: '加载中...'
//       });
  
//       return new Promise((resolve, reject) => {
//         wx.request({
//           url,
//           method,
//           data,
//           header: { 
//             Authorization: this._encode()
//           },
//           success: function(res) {
//             wx.hideLoading();
  
//             // 判断网络
//             if (res.statusCode == 404) {
//               reject();
//               return false;
//             } else if (res.statusCode != 200) {
//               wx.showToast({
//                 title: '网络出错,稍后在试!',
//                 icon: 'none'
//               });
//               return false;
//             }
//             // 成功返回数据
//             resolve(res.data);
//           },
//           fail: function(error) {
//             // 失败
//             wx.hideLoading();
//             reject(error);
//           },
//           complete: function() {
//             wx.hideLoading();
//           }
//         });
//       });
//     }
//   };
  
//   export default https;
  



//   AAArequest(url, params, method = "GET") {
//     return new Promise((resolve, reject) => {
//         let opts = {
//             url: url,
//             data: Object.assign({}, params),
//             method: method,
//             header: { 

//                 Authorization: this._encode()
//             },
//             success(res){
//                 if(res.statusCode === 200) {
//                     console.log(res)
//                     resolve(res)
//                 }else{
//                     reject(res)
//                 }
//             },
//             fail: reject
//         }
//         wx.request(opts)
//     })
// },



// _encode(){
//     const token = wx.getStorageSync('token')
//     const base64 = Base64.encode(token+':')
//     // Authorization: Basic base64(account:password)
//     return 'Basic '+base64
// },